home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 12: Textmags & Docs / nf_archive_12.iso / MAGS / SOURCES / ATARI_SRC.ZIP / atari source / PART_F / VIEWMAN / FAT.S < prev    next >
Encoding:
Text File  |  2001-02-10  |  5.5 KB  |  328 lines

  1. *
  2. *
  3.     .include    "equates.s"
  4. *
  5. *    a0 -> plane 0 of SRC
  6. *    a1 -> plane 0 of DST
  7. *    d5 = dot addr of left edge (0 mod 4, i.e left2rite 0,4,8,$c)
  8. *    d6 = width in 4-pixel blocks (right fringe must end on word)
  9. *    d7 = height in pixels
  10. *
  11. *
  12. fat:
  13.     movem.l    a0-a6/d0-d7,-(sp)
  14.     lea    wstruct,a5
  15.     tst.w    faton        ;is fat initialized?
  16.     bne    fatgo        ;br if all set
  17. *
  18. *  is library window available?
  19. *
  20.     lea    w,a0
  21.     movem.w    10(a0),d0-d3
  22.     lea    l,a0
  23.     movem.w    10(a0),d4-d7
  24.     add.w    d0,d2    
  25.     add.w    d1,d3
  26. *    
  27.     add.w    d4,d6    
  28.     add.w    d5,d7    
  29.     cmp.w    form_width,d6
  30.     bcc    fatout
  31.     cmp.w    form_height,d7
  32.     bcc    fatout
  33. *
  34.     cmp.w    d0,d4    ;is world left-edge left of library left-edge?
  35.     bcc    lftwrd    ;br if so
  36.     cmp.w    d0,d6    ;is world left-edge left of library rite-edge?
  37.     bcs    noover    ;br if no overlap
  38.     bra    hitechk
  39. lftwrd:
  40.     cmp.w    d2,d4    ;is world rite-edge left of library left-edge?
  41.     bcc    noover    ;exit if not
  42. hitechk:
  43.     cmp.w    d1,d5
  44.     bcc    topwrd
  45.     cmp.w    d1,d7
  46.     bcc    fatout
  47.     bra    noover
  48. topwrd:
  49.     cmp.w    d3,d5
  50.     bcs    fatout
  51. noover:
  52.     move.w    #-1,faton
  53. *
  54.     clr.w    fatx
  55.     clr.w    faty
  56.     clr.w    fathold
  57. *
  58.     lea    fatblk,a6
  59.     move.l    library,a0
  60.     move.l    a0,s_form(a6)
  61. *    
  62.     move.l    oldphyz,a0
  63.     move.l    a0,d_form(a6)
  64.     move.w    l_wid(a5),d0
  65.     add.w    #15,d0
  66.     and.w    #$fff0,d0
  67.     lsr.w    #1,d0
  68.     move.w    d0,s_nxln(a6)
  69.     move.w    scr_nxln,d0
  70.     move.w    d0,d_nxln(a6)
  71.     move.w    lxoffset(a5),s_xmin(a6)
  72.     move.w    lyoffset(a5),s_ymin(a6)
  73.     move.w    lx(a5),d_xmin(a6)
  74.     move.w    ly(a5),d_ymin(a6)
  75.     move.w    lwidth(a5),b_width(a6)
  76.     move.w    lheight(a5),b_height(a6)
  77.     move.w    #4,plane_ct(a6)
  78.     dc.w    bitblt
  79.  
  80. fatgo:
  81.     move.w    lx(a5),d0
  82.     move.w    d0,d6
  83.     add.w    lwidth(a5),d6
  84.     add.w    #15,d0
  85.     andi.w    #$fff0,d0
  86.     andi.w    #$fff0,d6
  87.     sub.w    d0,d6
  88.     lsr.w    #2,d6        ;here is our width
  89. *    
  90.     move.w    lheight(a5),d7
  91.     lsr.w    #2,d7        ;here is our height
  92. *
  93.     subq.w    #2,d7        ;adjust for dbra
  94. *
  95.     move.l    oldphyz,a0
  96.     move.l    a0,a1
  97. *
  98.     move.w    fathold,d1    ;check for alt key
  99.     beq    fat00        ;br if off
  100.     bpl    fat01x        ;br if trail or on
  101.     move.w    bsh_y,oldbshy    ;leading edge--save ypos
  102.     bra    fat00
  103. fat01x:
  104.     move.w    oldbshy,d0    ;assume no edges
  105.     cmp.w    #2,d1
  106.     beq    fat00x        ;br if no edges
  107. *
  108. *  trailing edge--compute new adjust
  109. *
  110.     sub.w    bsh_y,d0
  111.     add.w    d0,faty
  112. fat00:
  113.     move.w    bsh_y,d0
  114. fat00x:
  115.     add.w    faty,d0
  116.     move.w    d7,d1
  117.     lsr.w    #1,d1
  118.     sub.w    d1,d0
  119.     bpl    fat0
  120.     moveq    #0,d0
  121. fat0:
  122.     move.w    d0,d1
  123.     add.w    d7,d1
  124.     sub.w    form_height,d1
  125.     bmi    fat0x
  126.     sub.w    d1,d0
  127. fat0x:
  128.     mulu    scr_nxln,d0
  129.     add.l    d0,a0
  130. *
  131.  
  132.     move.w    fathold,d1    ;check for alt key
  133.     beq    fat10        ;br if off
  134.     bpl    fat11x        ;br if trail or on
  135.     move.w    bsh_x,oldbshx    ;leading edge--save xpos
  136.     bra    fat10
  137. fat11x:
  138.     move.w    oldbshx,d0    ;assume no edges
  139.     cmp.w    #2,d1
  140.     beq    fat10x        ;br if no edges
  141. *
  142. *  trailing edge--compute new adjust
  143. *
  144.     sub.w    bsh_x,d0
  145.     add.w    d0,fatx
  146. fat10:
  147.     move.w    bsh_x,d0
  148. fat10x:
  149.     add.w    fatx,d0
  150.     move.w    d6,d1
  151.     lsr.w    #2,d6        ;get 4-pixel blocks
  152.     lsr.w    #1,d1
  153.     sub.w    d1,d0
  154.     bpl    fat1
  155.     moveq    #0,d0
  156. fat1:
  157.     move.w    d0,d5
  158.     not.w    d5
  159.     andi.w    #$f,d5
  160.     addq.w    #1,d5        ;get long shift count
  161. *
  162.     andi.w    #$fff0,d0
  163.     lsr.w    #1,d0
  164.     add.w    d0,a0        ;a0->SRC
  165. *
  166.     move.w    ly(a5),d0
  167.     addq.w    #1,d0
  168.     mulu    scr_nxln,d0
  169.     adda.l    d0,a1
  170.     move.w    lx(a5),d0
  171.     add.w    #15,d0
  172.     andi.w    #$fff0,d0
  173.     lsr.w    #1,d0
  174.     add.w    d0,a1        ;a1 -> DST
  175. *
  176.     move.w    scr_nxln,d2
  177.  
  178.     lea    (a1,d2.w),a2
  179.     lea    (a2,d2.w),a3
  180.     lea    (a3,d2.w),a4
  181. *
  182.     move.l    a0,a5
  183.     move.l    a1,a6
  184. *
  185.     swap    d5
  186. fatlp0:
  187.     move.w    d7,-(sp)
  188.     move.w    d6,d5
  189. fatlp1:
  190.     swap    d5        ;get dot addr
  191.     movem.w    (a0)+,d0-d3    ;pick up 4 planes worth
  192.     swap    d0
  193.     swap    d1
  194.     swap    d2
  195.     swap    d3
  196.     move.w    (a0)+,d0
  197.     move.w    (a0)+,d1
  198.     move.w    (a0)+,d2
  199.     move.w    (a0)+,d3
  200.     subq.l    #8,a0
  201.     lsr.l    d5,d0
  202.     lsr.l    d5,d1
  203.     lsr.l    d5,d2
  204.     lsr.l    d5,d3
  205.     rol.w    #1,d0
  206.     rol.w    #1,d1
  207.     rol.w    #1,d2
  208.     rol.w    #1,d3
  209.     swap    d5
  210. *
  211.     moveq    #3,d7
  212. fatlp:
  213.     rol.w    #4,d0
  214.     moveq    #$1e,d4
  215.     and.w    d0,d4
  216.     move.w    nibtab(pc,d4.w),d4
  217.     move.w    d4,(a1)+
  218.     move.w    d4,(a2)+
  219.     move.w    d4,(a3)+
  220.     clr.w    (a4)+
  221. *
  222.     rol.w    #4,d1
  223.     moveq    #$1e,d4
  224.     and.w    d1,d4
  225.     move.w    nibtab(pc,d4.w),d4
  226.     move.w    d4,(a1)+
  227.     move.w    d4,(a2)+
  228.     move.w    d4,(a3)+
  229.     clr.w    (a4)+
  230. *
  231.     rol.w    #4,d2
  232.     moveq    #$1e,d4
  233.     and.w    d2,d4
  234.     move.w    nibtab(pc,d4.w),d4
  235.     move.w    d4,(a1)+
  236.     move.w    d4,(a2)+
  237.     move.w    d4,(a3)+
  238.     clr.w    (a4)+
  239. *
  240.     rol.w    #4,d3
  241.     moveq    #$1e,d4
  242.     and.w    d3,d4
  243.     move.w    nibtab(pc,d4.w),d4
  244.     move.w    d4,(a1)+
  245.     move.w    d4,(a2)+
  246.     move.w    d4,(a3)+
  247.     clr.w    (a4)+
  248.     subq.w    #1,d5
  249.     beq    newrow
  250.     dbra    d7,fatlp
  251.     bra    fatlp1
  252. *    
  253. nibtab:
  254.     dc.w    %0000000000000000
  255.     dc.w    %0000000000001110
  256.     dc.w    %0000000011100000
  257.     dc.w    %0000000011101110
  258.     dc.w    %0000111000000000
  259.     dc.w    %0000111000001110
  260.     dc.w    %0000111011100000
  261.     dc.w    %0000111011101110
  262.     dc.w    %1110000000000000
  263.     dc.w    %1110000000001110
  264.     dc.w    %1110000011100000
  265.     dc.w    %1110000011101110
  266.     dc.w    %1110111000000000
  267.     dc.w    %1110111000001110
  268.     dc.w    %1110111011100000
  269.     dc.w    %1110111011101110
  270. *
  271. newrow:
  272.     move.w    scr_nxln,d4
  273.     adda.w    d4,a5
  274.     move.l    a5,a0
  275.     move.w    d4,d5
  276.     lsl.w    #2,d5
  277.     adda.w    d5,a6
  278.     move.l    a6,a1
  279.     lea    (a1,d4.w),a2
  280.     lea    (a2,d4.w),a3
  281.     lea    (a3,d4.w),a4
  282.     move.w    (sp)+,d7
  283.     dbra    d7,fatlp0
  284. fatout:
  285.     movem.l    (sp)+,a0-a6/d0-d7
  286.     rts
  287. *
  288. *
  289. fatquit:
  290.     tst.w    faton
  291.     beq    fatdone
  292.     move.l    a0,-(sp)
  293.     lea    wstruct,a0
  294.     lea    lx(a0),a0
  295.     bsr    LibraryDraw
  296.     move.l    (sp)+,a0
  297.     clr.w    faton
  298. fatdone:
  299.     rts
  300. *
  301.     
  302. faton:
  303.     dc.w    0        ;0=fat not on
  304. fathold:
  305.     dc.w    0    ;ALT key:0=not down,2=down,-1=lead,1=trail
  306. fatx:
  307.     dc.w    0        ;hot spot adjust values
  308. faty:
  309.     dc.w    0
  310. oldbshx:
  311.     dc.w    0
  312. oldbshy:
  313.     dc.w    0
  314. fatblk:
  315.     dc.w    0,0,0,0,0
  316.     dc.l    $0        ;op_tab
  317.     dc.w    0,0        ;s_xmin,s_ymin
  318.     dc.l    0        ;s_form
  319.     dc.w    8,0,2
  320. *
  321.     dc.w    0,0        ;d_xmin,d_ymin
  322.     dc.l    0        ;d_form
  323.     dc.w    8,0,2
  324. *
  325.     dc.l    0
  326.     dc.w    0,0,0,0,0,0,0,0
  327.     dc.w    0,0,0,0,0,0,0,0
  328.